import type { InfoStoreApi } from '#/api/spa/store';

import { acceptHMRUpdate, defineStore } from 'pinia';

interface StoreSwitchState {
  /**
   * 当前选中的门店信息
   */
  currentStore: InfoStoreApi.InfoStore | null;
  /**
   * 是否显示门店切换弹窗
   */
  showSwitchModal: boolean;
}

/**
 * 门店切换管理
 */
export const useStoreSwitchStore = defineStore('store-switch', {
  actions: {
    /**
     * 设置当前门店
     */
    setCurrentStore(store: InfoStoreApi.InfoStore) {
      this.currentStore = store;
    },

    /**
     * 获取当前门店
     */
    getCurrentStore(): InfoStoreApi.InfoStore | null {
      return this.currentStore;
    },

    /**
     * 获取当前门店ID
     */
    getCurrentStoreId(): null | number {
      return this.currentStore?.id || null;
    },

    /**
     * 获取当前门店名称
     */
    getCurrentStoreName(): string {
      return this.currentStore?.storeName || '未选择门店';
    },

    /**
     * 显示门店切换弹窗
     */
    showModal() {
      this.showSwitchModal = true;
    },

    /**
     * 隐藏门店切换弹窗
     */
    hideModal() {
      this.showSwitchModal = false;
    },

    /**
     * 切换门店
     */
    switchStore(store: InfoStoreApi.InfoStore) {
      this.setCurrentStore(store);
      this.hideModal();
    },

    /**
     * 清除当前门店
     */
    clearCurrentStore() {
      this.currentStore = null;
    },
  },
  persist: {
    // 持久化存储当前门店信息
    pick: ['currentStore'],
  },
  state: (): StoreSwitchState => ({
    currentStore: null,
    showSwitchModal: false,
  }),
});

// 解决热更新问题
const hot = import.meta.hot;
if (hot) {
  hot.accept(acceptHMRUpdate(useStoreSwitchStore, hot));
}
